/**
* @file ipca.h
* @author Yasutomo Kawanishi
* @date Last Change: 2011/Feb/24.
* */
#ifndef _BACKGROUND_SUBTRACTOR_IPCA_H_
#define _BACKGROUND_SUBTRACTOR_IPCA_H_
#include <cv.h>
#include <vector>
#include <BackgroundImageGenerator/ipca.h>
#include <BackgroundSubtractor/rgbthresh.h>
class BackgroundSubtractorIPCA{
public:
	BackgroundSubtractorIPCA(int dims=10, const cv::Scalar& thresh=cv::Scalar(128,128,128));
	BackgroundSubtractorIPCA(const BackgroundSubtractorIPCA& other);
	~BackgroundSubtractorIPCA();
	const BackgroundSubtractorIPCA& operator=(const BackgroundSubtractorIPCA& other);

	void update(const cv::Mat& src);
	void train(const std::vector<cv::Mat>& trainingset);
	void apply(const cv::Mat& src, cv::Mat& dst);


private:
	int dims;
	cv::Mat temp;
	BackgroundImageGeneratorIPCA generator;
	BackgroundSubtractorRGBThresh subtractor;
};
#endif